CodeDeployでディレクトリのパーミッションを設定する
渡辺です。
CodeDeoloy使ってますか? ちょっとしたPHPのアプリケーションなどでは、デプロイツールを使うほどでもないことがあります(勿論、デプロイツールで自動化され、テストも行われるのが理想です)。 とはえいえ、AWSを利用しているとELB配下の複数台のEC2に設定することがほとんどです。 そんな場合には、気軽に使えたのがrsyncによるデプロイです。
今はCodeDeployがあります。 rsyncでデプロイしていたところはCodeDeploy使いましょう。
デプロイファイルのパーミッション
CodeDeployでは、デプロイ対象のファイル(群)をアーカイブ化して「リビジョン」と呼ばれるパッケージを作成します。 このリビジョンをデプロイ対象サーバに配置していくわけですが、デプロイ対象ファイルのパーミッションの設定が必要なケースは少なくありません。
例えば、アプリケーション内にキャッシュ用のtmpディレクトリがあり、apacheに書き込み権限を持たせなければならない、といった状況です。 こういった場合、appspec.ymlのpermissionsセクションを設定します。 permissionsセクションでは、objectで対象のファイル(ディレクトリ)を指定し、その他のオプションでowner, group, modeなどを設定します。
キャッシュディレクトリに書き込み権限を与える
最小限の構成でappspec.ymlを紹介します。
version: 0.0 os: linux files: - source: /app/ destination: /opt/app/ permissions: - object: /opt/app/tmp owner: apache group: apache mode: 744 type: - directory
objectで対象となるディレクトリを指定し、typeにdirectoryを指定します。 後はowner, group, modeを要件にあわせて設定すれば、CodeDeployによるファイル配置後に設定された権限にディレクトリのパーミッションが設定されます。
適当にコピペしてご活用ください。
permissionsのパラメータ
appspecのpermissionsセクションにAWS CodeDeploy の AppSpec を読み解くでも解説されていますが、よく利用されそうな記述例を幾つか紹介します。
拡張子がshのファイルに実行権限を与える
CodeDeployでデプロイできるのはPHPなどのアプリケーションだけではありません。 もちろん、シェルスクリプトだってデプロイできます。 と、なれば拡張子がshのファイルに実行権限を与えたいでしょう。
permissions: - object: /opt/app/bin pattern: "*.sh" owner: ec2-user group: ec2-user mode: 744 type: - file
対象のファイルはobjectで指定します。 この場合、patternが指定されているため、拡張子がshのファイルのみパーミッションが変更されます。 patternが指定されていない場合は、ディレクトリ配下のファイルすべてが対象です。
特定のファイルを除外したい
特定のファイルをパーミッション指定から除外したい場合は、exceptを指定します。
permissions: - object: /opt/app/ pattern: "*.php" except: [install.php] owner: apache group: apache mode: 744 type: - file
exceptは配列で指定してください。
まとめ
CodeDeployは、アプリケーション配備のためのサービスですが、スクリプトファイルの配置などにも使えそうですね。 他にも細かいオプションはありますので、ドキュメントもあわせて参照してください。